// Vue
import Vue from "vue";
import App from "./App";

// 配置
import Setting from "./setting";

// 混合
import mixinApp from "@/mixins/app";

// 插件
import plugins from "@/plugins";

// store
import store from "@/store/index";

// iView 和 iView Pro
import ViewUI from "view-design";
import iViewPro from "@/libs/iview-pro/iview-pro.min.js";

import iIconSelect from "@/components/icon-selector/icon-select.min";
Vue.use(iIconSelect);

//图片验证
import SlideVerify from "vue-monoplasty-slide-verify";
Vue.use(SlideVerify);

import PerfectScrollbar from 'vue2-perfect-scrollbar'
import 'vue2-perfect-scrollbar/dist/vue2-perfect-scrollbar.css'
Vue.use(PerfectScrollbar)

// 菜单和路由
import router from "./router";
import menuHeader from "@/menu/header";
import menuSider from "@/menu/sider";
import { frameInRoutes } from "@/router/routes";

// 多语言
import i18n from "@/i18n";

// 方法
import { getHeaderName, getMenuSider, getSiderSubmenu } from "@/libs/system";

// 内置组件
import iLink from "@/components/link";
import iFrame from "@/components/frame";
import MuseComponents from './components/muse_theme/muse_global_components';
MuseComponents(Vue);

// 使用样式，修改主题可以在 styles 目录下创建新的主题包并修改 iView 默认的 less 变量
// 参考 https://www.iviewui.com/docs/guide/theme
import "./styles/index.less";
import "./libs/iview-pro/iview-pro.css";

import "./assets/iconfont/demo.css";
import "./assets/iconfont/iconfont.css";

import "./assets/muse_theme/iconfont/iconfont.css"; //muse theme
import './assets/muse_theme/less/index.less'; //muse theme
import './assets/muse_theme/font/font.css'; //muse theme

import regulars from './validRule/commonRegulars'; //muse regexp
Vue.prototype.$Regulars = regulars;

import BasicLayout from "@/layouts/basic-layout";

if (window) window.$t = (key, value) => i18n.t(key, value);
import util from "@/libs/util";

import * as filters from "./filter/index";

import routess from "@/router/modules/menu.js";

// 加载所有全局过滤器
Object.keys(filters).forEach((key) => {
  Vue.filter(key, filters[key]);
});

Vue.use(plugins);

Vue.use(ViewUI, {
  i18n: (key, value) => i18n.t(key, value),
});
Vue.use(iViewPro);
Vue.component("i-link", iLink);
Vue.component("i-frame", iFrame);

import ImageViewer from "vue2-viewer";
Vue.use(ImageViewer);

window.addEventListener("beforeunload", function (event) {
  // 设置returnValue属性以显示浏览器默认的刷新提示信息
  // alert("111");
});

new Vue({
  mixins: [mixinApp],
  router,
  store,
  i18n,
  render: (h) => h(App),
  created() {
    // 处理路由 得到每一级的路由设置
    this.$store.commit("admin/page/init", frameInRoutes);
    // 设置顶栏菜单
    this.$store.commit("admin/menu/setHeader", menuHeader);
    // 加载用户登录的数据
    this.$store.dispatch("admin/account/load");
    // 初始化全屏监听
    this.$store.dispatch("admin/layout/listenFullscreen");
  },
  watch: {
    // 监听路由 控制侧边栏显示 标记当前顶栏菜单（如需要）
    $route(to, from) {
      let path = to.matched[to.matched.length - 1].path;
      if (!Setting.dynamicSiderMenu) {
        let headerName = getHeaderName(path, menuSider);
        if (headerName === null) {
          path = to.path;
          headerName = getHeaderName(path, menuSider);
        }
        // 在 404 时，是没有 headerName 的
        if (headerName !== null) {
          this.$store.commit("admin/menu/setHeaderName", headerName);
          this.$store.commit("admin/menu/setMenuSider", menuSider);

          const filterMenuSider = getMenuSider(menuSider, headerName);
          this.$store.commit("admin/menu/setSider", filterMenuSider);
          this.$store.commit("admin/menu/setActivePath", to.path);

          const openNames = getSiderSubmenu(path, menuSider);
          this.$store.commit("admin/menu/setOpenNames", openNames);
        }
      } else {
        // 路由懒加载
        const loadView = (view) => {
          return (resolve) => require([`@${view}.vue`], resolve);
        };

        // console.log(routess,'routesroutes')

        let meta = {
          auth: true,
        };

        // let routes = [
        //   {
        //     path: "/",
        //     name: "home",
        //     redirect: {
        //       name: `homepage`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/home",
        //         name: `homepage`,
        //         meta: {
        //           ...meta,
        //           title: "首页",
        //           closable: false,
        //         },
        //         component: () => import("@/pages/home"),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/",
        //     name: "enterpriseInforManage",
        //     redirect: {
        //       name: `enterpriseInforInquiry`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/enterpriseInforInquiry",
        //         name: `enterpriseInforInquiry`,
        //         meta: {
        //           ...meta,
        //           title: "企业信息查询",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/enterpriseInforManage/enterpriseInforInquiry/index"
        //           ),
        //       },
        //       {
        //         path: "/enterpriseInforExamine",
        //         name: `enterpriseInforExamine`,
        //         meta: {
        //           ...meta,
        //           title: "企业信息审核",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/enterpriseInforManage/enterpriseInforExamine/index"
        //           ),
        //       },
        //       {
        //         path: "/recordInforInquiry",
        //         name: `recordInforInquiry`,
        //         meta: {
        //           ...meta,
        //           title: "备案项目查询",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/enterpriseInforManage/recordInforInquiry/index"
        //           ),
        //       },
        //       {
        //         path: "/sharingRuleAudit",
        //         name: `sharingRuleAudit`,
        //         meta: {
        //           ...meta,
        //           title: "企业收益规则审核",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/enterpriseInforManage/sharingRuleAudit/index"
        //           ),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/",
        //     name: "userOrganizationManage",
        //     redirect: {
        //       name: `userOrganizationManage`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/enterpriseUsers",
        //         name: `enterpriseUsers`,
        //         meta: {
        //           ...meta,
        //           title: "企业用户",
        //           closable: true,
        //         },
        //         component: () =>
        //           import("@/pages/userOrganizationManage/enterpriseUsers"),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/",
        //     name: "businessInformationManage",
        //     redirect: {
        //       name: `businessInformationManage`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/businessInformationManage",
        //         name: `businessInformationManage`,
        //         meta: {
        //           ...meta,
        //           title: "经营信息管理",
        //           closable: true,
        //         },
        //         component: () =>
        //           import("@/pages/businessInformationManage/index"),
        //       },
        //       {
        //         path: "/businessInformationDetails",
        //         name: `businessInformationDetails`,
        //         meta: {
        //           ...meta,
        //           title: "经营信息详情",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/businessInformationManage/businessInformationDetails"
        //           ),
        //       },
        //       {
        //         path: "/businessInfoHistory",
        //         name: `businessInfoHistory`,
        //         meta: {
        //           ...meta,
        //           title: "变更历史记录",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/businessInformationManage/businessInfoHistory"
        //           ),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/",
        //     name: "dataCapture",
        //     redirect: {
        //       name: `dataCapture`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/dataCapture",
        //         name: `dataCapture`,
        //         meta: {
        //           ...meta,
        //           title: "大数据采集",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/dataCapture/index"),
        //       },
        //       {
        //         path: "/dataCaptureAdd",
        //         name: `dataCaptureAdd`,
        //         meta: {
        //           ...meta,
        //           title: "发布经营信息",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/dataCapture/dataCaptureAdd"),
        //       },
        //       {
        //         path: "/dataCaptureDetails",
        //         name: `dataCaptureDetails`,
        //         meta: {
        //           ...meta,
        //           title: "建设库详情",
        //           closable: true,
        //         },
        //         component: () =>
        //           import("@/pages/dataCapture/dataCaptureDetails"),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/",
        //     name: "businessInformationTracking",
        //     redirect: {
        //       name: `businessInformationTracking`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/businessInformationMap",
        //         name: `businessInformationMap`,
        //         meta: {
        //           ...meta,
        //           title: "经营信息一张图",
        //           closable: true,
        //           cache: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/businessInformationTracking/businessInformationMap"
        //           ),
        //       },
        //       {
        //         path: "/businessInformationWarning",
        //         name: `businessInformationWarning`,
        //         meta: {
        //           ...meta,
        //           title: "经营信息预警查询",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/businessInformationTracking/businessInformationWarning"
        //           ),
        //       },
        //       {
        //         path: "/businessInfoTrackDetails",
        //         name: `businessInfoTrackDetails`,
        //         meta: {
        //           ...meta,
        //           title: "经营信息跟踪详情",
        //           closable: true,
        //         },
        //         component: () =>
        //           import(
        //             "@/pages/businessInformationTracking/businessInformationMap/businessInfoTrackDetails"
        //           ),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/",
        //     name: "systemManage",
        //     redirect: {
        //       name: `systemManage`,
        //     },
        //     meta,
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/menuManage",
        //         name: `menuManage`,
        //         meta: {
        //           ...meta,
        //           title: "菜单管理",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/systemManage/menuManage"),
        //       },
        //       {
        //         path: "/permissionManage",
        //         name: `permissionManage`,
        //         meta: {
        //           ...meta,
        //           title: "权限管理",
        //           closable: true,
        //         },
        //         component: () =>
        //           import("@/pages/systemManage/permissionManage"),
        //       },
        //       {
        //         path: "/roleManage",
        //         name: `roleManage`,
        //         meta: {
        //           ...meta,
        //           title: "组织管理",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/systemManage/roleManage"),
        //       },
        //       {
        //         path: "/dictionaryManage",
        //         name: `dictionaryManage`,
        //         meta: {
        //           ...meta,
        //           title: "字典管理",
        //           closable: true,
        //         },
        //         component: () =>
        //           import("@/pages/systemManage/dictionaryManage"),
        //       },
        //       {
        //         path: "/warningTimeSet",
        //         name: `warningTimeSet`,
        //         meta: {
        //           ...meta,
        //           title: "预警时间设置",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/systemManage/warningTimeSet"),
        //       },
        //       {
        //         path: "/SMSTemplate",
        //         name: `SMSTemplate`,
        //         meta: {
        //           ...meta,
        //           title: "短信模板",
        //           closable: true,
        //         },
        //         component: () =>
        //           import("@/pages/systemManage/warningTimeSet/SMSTemplate"),
        //       },
        //       {
        //         path: "/pageTest",
        //         name: `pageTest`,
        //         meta: {
        //           ...meta,
        //           title: "预警时间设置",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/pageTest/index"),
        //       },
        //     ],
        //   },
        //   {
        //     path: "/logManage",
        //     name: `logManage`,
        //     meta: {
        //       ...meta,
        //       title: "日志管理",
        //       closable: true,
        //     },
        //     component: BasicLayout,
        //     children: [
        //       {
        //         path: "/loginLog",
        //         name: `loginLog`,
        //         meta: {
        //           ...meta,
        //           title: "登录日志",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/logManage/loginLog"),
        //       },
        //       {
        //         path: "/userOperate",
        //         name: `userOperate`,
        //         meta: {
        //           ...meta,
        //           title: "用户操作日志",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/logManage/userOperate"),
        //       },
        //       {
        //         path: "/systemExceptionLog",
        //         name: `systemExceptionLog`,
        //         meta: {
        //           ...meta,
        //           title: "系统异常日志",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/logManage/systemExceptionLog"),
        //       },
        //       {
        //         path: "/systemAccessLog",
        //         name: `systemAccessLog`,
        //         meta: {
        //           ...meta,
        //           title: "系统访问日志",
        //           closable: true,
        //         },
        //         component: () => import("@/pages/logManage/systemAccessLog"),
        //       },
        //     ],
        //   },
        // ];

        let routes = routess;

        let dataRole = localStorage.getItem("userMenu"); // 存储菜单

        let menuDataList = [];
        let routeDataList = [];

        if (dataRole) {
          let menuList = JSON.parse(dataRole).sort(function (a, b) {
            return a.orderNumber - b.orderNumber;
          });
          let routeList = JSON.parse(dataRole).sort(function (a, b) {
            return a.orderNumber - b.orderNumber;
          });
          menuDataList = menuList.filter(
            (o) => o.parentId == "0" && o.type == "Menu"
          );
          routeDataList = routeList.filter(
            (o) => o.parentId == "0" && o.type == "Menu"
          );
          let level = 1;
          const menuRouteFilter = (data, types) => {
            for (let item in data) {
              data[item].path = data[item].routePath;
              data[item].title = data[item].menuName;
              data[item].header = "home";
              data[item].custom =
                data[item].icon != "ivu-icon-ios-disc"
                  ? " iconfont " + data[item].icon
                  : data[item].icon;
              delete data[item].icon;
              let childList = [];
              if (types == 1) {
                childList = menuList.filter(
                  (o1) =>
                    o1.parentId == data[item].permissionMenuId &&
                    o1.isShow &&
                    o1.type == "Menu"
                );
              } else {
                childList = routeList.filter(
                  (o1) => o1.parentId == data[item].permissionMenuId
                );
              }
              if (childList.length) {
                data[item].children = childList.sort(function (a, b) {
                  return a.orderNumber - b.orderNumber;
                });
                // level++;
                menuRouteFilter(data[item].children);
              }
            }
          };
          menuRouteFilter(menuDataList, 1);
          menuRouteFilter(routeDataList, 2);
        }
        const routeFilte = (list) => {
          list.forEach((o) => {
            if (o.level == 1) {
              o.path = "/";
              o.name = o.routeName;
              o.redirect = {
                name: o.children[0].routeName,
              };
              o.meta = meta;
              o.component = BasicLayout;
            }
            if (o.level != 1) {
              o.path = o.routePath;
              o.name = o.routeName;
              o.meta = {
                ...meta,
                title: o.menuName,
                closable: true,
              };
              o.component = loadView(o.componentPath);
            }
            if (o.children) {
              routeFilte(o.children);
            }
          });
        };
        routeFilte(routeDataList);

        // routes = rl
        // console.log(rl,'rl',routes)

        let allRoutes = this.$router.getRoutes();
        console.log(allRoutes, "allRoutes");
        if(allRoutes.length < 30){
          this.$router.addRoutes(routes);
        }
        const newRoutes = frameInRoutes.concat(routes);
        localStorage.setItem("newRoutes", JSON.stringify(routes));
        this.$store.commit("admin/page/init", newRoutes);

        let gd = [
          {
            path: "/home",
            title: "首页",
            header: "home",
            custom: "icon-home iconfont",
          },
          // {
          //   path: "/pageTest",
          //   title: "组件页面",
          //   header: "home",
          //   custom: "icon-home iconfont",
          // },
        ];
        let dynamicSider = gd.concat(menuDataList);
        // let dynamicSider = [
        //   {
        //     path: "/home",
        //     title: "首页",
        //     header: "home",
        //     custom: "icon-home iconfont",
        //   },
        //   {
        //     path: "/pageTest",
        //     title: "组件页面",
        //     header: "home",
        //     custom: "icon-home iconfont",
        //   },
        //   {
        //     path: "/enterpriseInforManage",
        //     title: "企业信息管理",
        //     header: "home",
        //     custom: "icon-company iconfont",
        //     children: [
        //       {
        //         path: "/enterpriseInforInquiry",
        //         title: "企业信息查询",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/enterpriseInforExamine",
        //         title: "企业信息审核",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/recordInforInquiry",
        //         title: "备案项目查询",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/sharingRuleAudit",
        //         title: "企业收益规则审核",
        //         header: "home",
        //         custom: "",
        //       },
        //     ],
        //   },
        //   // {
        //   //   path: "/userOrganizationManage",
        //   //   title: "用户组织管理",
        //   //   header: "home",
        //   //   custom: "icon-setting iconfont",
        //   //   children: [
        //   //     {
        //   //       path: "/enterpriseUsers",
        //   //       title: "企业用户",
        //   //       header: "home",
        //   //       custom: "",
        //   //     },
        //   //   ],
        //   // },
        //   {
        //     path: "/businessInformationManage",
        //     title: "经营信息管理",
        //     header: "home",
        //     custom: "icon-jingyingyulan1 iconfont",
        //   },
        //   {
        //     path: "/dataCapture",
        //     title: "大数据采集",
        //     header: "home",
        //     custom: "icon-data iconfont",
        //   },
        //   {
        //     path: "/businessInformationTracking",
        //     title: "经营信息跟踪",
        //     header: "home",
        //     custom: "icon-info iconfont",
        //     children: [
        //       {
        //         path: "/businessInformationMap",
        //         title: "经营信息一张图",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/businessInformationWarning",
        //         title: "经营信息预警查询",
        //         header: "home",
        //         custom: "",
        //       },
        //     ],
        //   },
        //   {
        //     path: "/systemManage",
        //     title: "系统配置",
        //     header: "home",
        //     custom: "icon-setting_01 iconfont",
        //     children: [
        //       {
        //         path: "/menuManage",
        //         title: "菜单管理",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/permissionManage",
        //         title: "权限管理",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/roleManage",
        //         title: "组织管理",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/dictionaryManage",
        //         title: "字典管理",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/warningTimeSet",
        //         title: "预警时间设置",
        //         header: "home",
        //         custom: "",
        //       },
        //     ],
        //   },
        //   {
        //     path: "/logManage",
        //     title: "日志管理",
        //     header: "home",
        //     icon: "md-locate",
        //     children: [
        //       {
        //         path: "/loginLog",
        //         title: "用户登录日志",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/userOperate",
        //         title: "用户操作日志",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/systemExceptionLog",
        //         title: "系统异常日志",
        //         header: "home",
        //         custom: "",
        //       },
        //       {
        //         path: "/systemAccessLog",
        //         title: "系统访问日志",
        //         header: "home",
        //         custom: "",
        //       },
        //     ],
        //   },
        //   // {
        //   //   path: `/console`,
        //   //   title: "主控台",
        //   //   header: "home",
        //   //   custom: "i-icon i-icon-notification",
        //   // },
        //   // {
        //   //   path: "/log",
        //   //   header: "home",
        //   //   title: "日志",
        //   //   icon: "md-locate",
        //   // },
        // ];
        localStorage.setItem("dynamicSider", JSON.stringify(dynamicSider));
        let headerName1 = getHeaderName(path, dynamicSider);
        if (headerName1 === null) {
          path = to.path;
          headerName1 = getHeaderName(path, dynamicSider);
        }
        const filterMenuSider = getMenuSider(dynamicSider, headerName1);
        this.$store.commit("admin/menu/setHeaderName", "home");
        this.$store.commit("admin/menu/setMenuSider", dynamicSider);
        this.$store.commit("admin/menu/setSider", filterMenuSider);
        this.$store.commit("admin/menu/setActivePath", to.path);
        const openNames1 = getSiderSubmenu(path, dynamicSider);
        this.$store.commit("admin/menu/setOpenNames", openNames1);
      }
      this.appRouteChange(to, from);
    },
  },
}).$mount("#app");
